package com.guanzhi.Convert;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * 小工具
 * <p> Package: com.guanzhi.Convert </p>
 * <p> File: ObjectConvertListUtil.java </p>
 * <p> Description:  (Object 转 List)</p>
 * <p> Date: 2023/3/22 11:36</p>
 *
 * @author 观之
 * @version 1.0 （代码版本）
 * @email <a href="mailto:guanzhi55634@aliyun.com">观之</a>（邮箱）
 * @since JDK11（JDK版本）
 */
@SuppressWarnings("SpellCheckingInspection")
public class ObjectConvertListUtil {

    /**
     * Object 转 List
     *
     * @param obj   Object类型对象
     * @param clazz 要转换的类型
     * @param <T>   泛型
     * @return List泛型集合
     */
    public static <T> List<T> castList(Object obj, Class<T> clazz) {
        List<T> result = new ArrayList<>();
        if (obj instanceof List<?>) {
            for (Object o : (List<?>) obj) {
                result.add(clazz.cast(o));
            }
            return result;
        }
        return new ArrayList<>();
    }

    /**
     * Object 转 List<Map<T,T>>
     *
     * @param obj    Object类型
     * @param kClazz Map KEY类型
     * @param vClazz Map VALUE类型
     * @param <K>    KEY类型
     * @param <V>    VALUE类型
     * @return LIST MAP
     */
    public static <K, V> List<Map<K, V>> castListMap(Object obj, Class<K> kClazz, Class<V> vClazz) {
        List<Map<K, V>> result = new ArrayList<>();
        if (obj instanceof List<?>) {
            for (Object mapObj : (List<?>) obj) {
                if (mapObj instanceof Map<?, ?>) {
                    Map<K, V> map = new HashMap<>(16);
                    for (Map.Entry<?, ?> entry : ((Map<?, ?>) mapObj).entrySet()) {
                        map.put(kClazz.cast(entry.getKey()), vClazz.cast(entry.getValue()));
                    }
                    result.add(map);
                }
            }
            return result;
        }
        return null;
    }

}
